/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
 * @brief map-messenger /map-messenger/include/MapInteger.h
 * Copyright (C) Matheus Neder, Amanda Duarte, Priscila Cardoso 2010
 * 
 * MapInteger.h is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * MapInteger.h is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @brief map-messenger /map-messenger/include/MapInteger.h
 * @file MapInteger.h
 * @date 05/06/2010
 * @author Matheus Neder <matheusneder@gmail.com>
 * @author Amanda Duarte <mandinhaduarte89@gmail.com>
 * @author Priscila Cardoso <japinha-htinha@hotmail.com>
 */

#ifndef MAPINTEGER_H_
#define MAPINTEGER_H_

#include <ostream>
#include <limits>
#include <cstdlib>

typedef long MapInteger;

//class MapInteger
//{
//	typedef long int ValueType;
//	ValueType value;
//public:
//	static MapInteger max()
//	{
//		return MapInteger(std::numeric_limits<ValueType>::max());
//	}
//	MapInteger(const ValueType& n) :
//		value(n)
//	{
//	}
//
//	MapInteger() :
//		value(0)
//	{
//	}
//
//	MapInteger(const MapInteger& c) // construtor de copia
//	{
//		value = c.value;
//	}
//
//	inline MapInteger operator+(const MapInteger& n) const
//	{
//		return MapInteger(value + n.value);
//	}
//
//	inline MapInteger operator-(const MapInteger& n) const
//	{
//		return MapInteger(value - n.value);
//	}
//
//	inline MapInteger operator*(const MapInteger& n) const
//	{
//		return MapInteger(value * n.value);
//	}
//
//	inline MapInteger operator/(const MapInteger& n) const
//	{
//		return MapInteger(value / n.value);
//	}
//
//	inline MapInteger operator%(const MapInteger& n) const
//	{
//		return MapInteger(value % n.value);
//	}
//	inline MapInteger& operator=(const MapInteger& n)
//	{
//		value = n.value;
//		return (*this);
//	}
//
//	inline bool operator==(const MapInteger& n) const
//	{
//		return value == n.value;
//	}
//
//	inline bool operator!=(const MapInteger& n) const
//	{
//		return value != n.value;
//	}
//
//	inline bool operator>(const MapInteger& n) const
//	{
//		return value > n.value;
//	}
//
//	inline bool operator<(const MapInteger& n) const
//	{
//		return value < n.value;
//	}
//
//	inline bool operator>=(const MapInteger& n) const
//	{
//		return value >= n.value;
//	}
//	inline bool operator<=(const MapInteger& n) const
//	{
//		return value <= n.value;
//	}
//
//	friend std::ostream& operator<<(std::ostream& out, const MapInteger& n)
//	{
//		out << n.value;
//		return out;
//	}
//
//	friend ValueType operator+(ValueType value, const MapInteger& n)
//	{
//		return (value + n.value);
//	}
//
//	friend ValueType operator-(ValueType value, const MapInteger& n)
//	{
//		return (value - n.value);
//	}
//
//	friend ValueType operator*(ValueType value, const MapInteger& n)
//	{
//		return (value * n.value);
//	}
//	friend ValueType operator/(ValueType value, const MapInteger& n)
//	{
//		return (value / n.value);
//	}
//	friend ValueType operator%(ValueType value, const MapInteger& n)
//	{
//		return (value % n.value);
//	}
//
//	friend bool operator==(ValueType value, const MapInteger& n)
//	{
//		return value == n.value;
//	}
//
//	friend bool operator!=(ValueType value, const MapInteger& n)
//	{
//		return value != n.value;
//	}
//
//	friend bool operator>(ValueType value, const MapInteger& n)
//	{
//		return value > n.value;
//	}
//
//	friend bool operator<(ValueType value, const MapInteger& n)
//	{
//		return value < n.value;
//	}
//	friend bool operator>=(ValueType value, const MapInteger& n)
//	{
//		return value >= n.value;
//	}
//	friend bool operator<=(ValueType value, const MapInteger& n)
//	{
//		return value <= n.value;
//	}
//
//	inline static MapInteger rand()
//	{
//		return ::rand();
//	}
//
//	/**
//	 * @brief Gera um numero aleatorio x tal que x >= min
//	 */
//	inline static MapInteger rand(const MapInteger& min)
//	{
//		return (rand() + min);
//	}
//
//	/**
//	 * @brief Gera um numero aleatorio x tal que min <= x <= max
//	 */
//	inline static MapInteger rand(const MapInteger& min, const MapInteger& max)
//	{
//		return (rand() % (max - min + 1)) + min;
//	}
//};

struct MapIntegerUtil
{
	inline static MapInteger rand()
	{
		return ::rand();
	}

	/**
	 * @brief Gera um numero aleatorio x tal que x >= min
	 */
	inline static MapInteger rand(const MapInteger& min)
	{
		return (rand() + min);
	}

	/**
	 * @brief Gera um numero aleatorio x tal que min <= x <= max
	 */
	inline static MapInteger rand(const MapInteger& min, const MapInteger& max)
	{
		return (rand() % (max - min + 1)) + min;
	}
};

//typedef long int MapInteger;

#endif /* MAPINTEGER_H_ */
